Mem3.c中使用了21个函数,其函数名及功能列表如下。
编号 | 函数名 | 功能 |
---|---|---|
1 | memsys3UnlinkFromList(u32 i, u32 *pRoot) | 将第i个项从双向链表中删除, 如果是第一个,则调整pRoot指针;同时调整 前一个的next指针,和后一个的prev指针。将卸下来的这一项的prev和next都设置为null。 |
2 | memsys3Unlink(u32 i) | 从双向循环链表中删除第i项。 |
3 | memsys3LinkIntoList(u32 i, u32 *pRoot) | 将 mem3.aPool[i] 插入到pRoot指向的链表的头部,更新pRoot指向新插入的这一项。 |
4 | memsys3Link(u32 i) | 将第i项插入链表中。 |
5 | memsys3Enter(void) | 获取STATIC_MEM mutex锁,保证数据库完整性。 |
6 | memsys3Leave(void) | 释放锁。 |
7 | memsys3OutOfMemory(int nByte) | 分配的内存不足时释放n字节空间。 |
8 | void *memsys3Checkout(u32 i, u32 nBlock) | 调整第i块的大小为nblock,为用户使用,返回该空间的地址。 |
9 | void *memsys3FromMaster(u32 nBlock) | 从iMaster开始的大chunk上切下nBlock的大小供用户使用,返回该空间的地址。 |
10 | memsys3Merge(u32 *pRoot) | 合并相邻chunk块到*pRoot指向的链表中,若块大于当前master,则将其替换。 |
11 | void *memsys3MallocUnsafe(int nByte) | 给用户分配n字节的空间,返回该空间的地址。 |
12 | memsys3FreeUnsafe(void *pOld) | 释放内存空间。 |
13 | int memsys3Size(void *p) | 以字节返回未分配内存大小(头8字节除外)。 |
14 | int memsys3Roundup(int n) | 聚集请求大小给下一个有效的内存分配大小。 |
15 | void *memsys3Malloc(int nBytes) | 申请分配n字节的内存空间。 |
16 | void memsys3Free(void *pPrior) | 释放*pPrior指向的内存空间。 |
17 | void memsys3Realloc(void pPrior, int nBytes) | 重新分配*pPrior指向的内存空间大小为n字节。 |
18 | int memsys3Init(void *NotUsed) | 初始化该内存分配器。 |
19 | void memsys3Shutdown(void *NotUsed) | 取消模块初始化设置。 |
20 | void sqlite3Memsys3Dump(const char *zFilename) | 将该内存分配器进行的操作写入日志文件。 |
21 | const sqlite3_mem_methods *sqlite3MemGetMemsys3(void) | 用于与外部链接。 |
Mem3.c就通过上面的结构体和函数来实现sqlite的内存分配,当然,实现内存的分配器不仅仅这一个,还有mem0.c\mem1.c\mem2.c\mem5.c,这些将在其他章节讲解。